package com.hehao.java_basic.stream;


import com.hehao.common.entiy.Person;

import java.util.List;

/**
 * @author Damon
 * @date 2022/2/23
 * stream  规约操作，也称缩减，顾名思义，是把一个流缩减成一个值，能实现对集合求和、求乘积和求最值操作。
 * demo 求所有员工的工资之和和最高工资
 */
public class ReduceDemo {
    public static void main(String[] args) {

        List<Person> list = Person.getList();
        /**
         * 求所有员工的工资之和
         */
        System.out.println("==============方式一================");
        System.out.println(list.stream().map(Person::getSalary).reduce(Integer::sum));

        System.out.println("==============方式二================");
        System.out.println(list.stream().reduce(0, (sum, p) -> sum += p.getSalary(), (sum1, sum2) -> sum1 + sum2));

        System.out.println("==============方式三================");
        System.out.println(list.stream().reduce(0, (sum, p) -> sum += p.getSalary(), Integer::sum));

        /**
         * 求最高工资
         */
        System.out.println("==============方式一================");
        System.out.println(list.stream().reduce(0, (max, p) -> max > p.getSalary()?max : p.getSalary(), (max1, max2) -> max1 > max2 ?max1:max2));

        System.out.println("==============方式二================");
        System.out.println(list.stream().reduce(0, (max, p) -> max > p.getSalary()?max : p.getSalary(), Integer::max));
    }
}
